package com.ershui.blog.system.controller;

import com.ershui.blog.system.domain.PageDomain;
import com.ershui.blog.system.domain.TableDataInfo;
import com.ershui.blog.system.util.StringUtils;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import org.apache.commons.lang3.time.DateUtils;
import org.springframework.web.bind.WebDataBinder;
import org.springframework.web.bind.annotation.InitBinder;
import org.springframework.web.context.request.RequestAttributes;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
import com.ershui.blog.system.util.Convert;
import javax.servlet.http.HttpServletRequest;
import java.beans.PropertyEditorSupport;
import java.text.ParseException;
import java.util.Date;
import java.util.List;

/**
 * web层通用处理
 */
public class BaseController {

//    @InitBinder
//    public void InitBinder(WebDataBinder binder){
//        //类型转换
//        binder.registerCustomEditor(Date.class,new PropertyEditorSupport(){
//            @Override
//            public void setAsText(String text) throws IllegalArgumentException {
//                Date date=null;
//                if(text!=null){
//                    try {
//                        date= DateUtils.parseDate(text,"yyyy/MM/dd HH:mm:ss");
//                    } catch (ParseException e) {
//                        e.printStackTrace();
//                    }
//                }
//                setValue(date);
//            }
//        });
//    }

    /**
     * 启动分页
     */
    protected void startPage(){
        PageDomain pageDomain=getDomain();
        Integer pageNum=pageDomain.getPageNum();
        Integer pageSize=pageDomain.getPageSize();
        if(StringUtils.isNotNull(pageNum)&&StringUtils.isNotNull(pageSize)){
            String orderBy=pageDomain.getOrderBy();
            PageHelper.startPage(pageNum,pageSize,orderBy);
        }
    }

    /**
     * 获取分页返回数据
     * @return
     */
    protected TableDataInfo getDataTable(List<?> list){
        TableDataInfo rspData=new TableDataInfo();
        rspData.setCode(0);
        rspData.setData(list);
        rspData.setCount(new PageInfo(list).getTotal());
        return rspData;
    }



    protected PageDomain getDomain(){
        PageDomain pageDomain=new PageDomain();
        pageDomain.setPageNum(Convert.toInt(getRequest().getParameter("page")));
        pageDomain.setPageSize(Convert.toInt(getRequest().getParameter("limit")));
        pageDomain.setSort(getRequest().getParameter("sort"));
        pageDomain.setOrderByColumn(getRequest().getParameter("orderByColumn"));
        return pageDomain;
    }


    protected ServletRequestAttributes getRequestAttributes(){
        RequestAttributes attributes= RequestContextHolder.getRequestAttributes();
        return (ServletRequestAttributes) attributes;
    }

    protected HttpServletRequest getRequest(){
        return getRequestAttributes().getRequest();
    }
}
